#ifndef __SYNAPSE_H__
#define __SYNAPSE_H__

#include "std_def.h"
#include "ntype.h"

class synapse
{
public:
    synapse();
    synapse(const ntype::signal_t&, const ntype::signal_t&, const ntype::weight_t&);
    synapse(const synapse&);
    virtual ~synapse();

    void setFSignal(ntype::signal_t);
    void setBSignal(ntype::signal_t);
    void setWeight(ntype::weight_t);

    ntype::signal_t getFSignal(void);
    ntype::signal_t getBSignal(void);
    ntype::weight_t getWeight(void);

    void setFSignalStudy(ntype::signalid_t, ntype::signal_t);
    void setBSignalStudy(ntype::signalid_t, ntype::signal_t);
    void setWeightBack(ntype::signalid_t, ntype::weight_t);

    ntype::signal_t getFSignalStudy(ntype::signalid_t = 0);
    ntype::signal_t getBSignalStudy(ntype::signalid_t = 0);
    ntype::weight_t getWeightBack(ntype::signalid_t = 0);

    ntype::signalid_t getMaxSignalStudyBufferIndex() const;

    ntype::error_t getError(ntype::signalid_t);


protected:
    ntype::signal_t  f_signal;
    ntype::signal_t  b_signal;
    ntype::weight_t  weight;

    ntype::signal_t  f_signal_study[MAX_STUDY_SIGNAL_BUFFER];
    ntype::signal_t  b_signal_study[MAX_STUDY_SIGNAL_BUFFER];
    ntype::weight_t  weight_back[MAX_STUDY_SIGNAL_BUFFER];

};


#endif //__SYNAPSE_H__
